﻿/*
 * 
static Global variable: 文件作用域：只在声明的文件中有效，其他源文件中不可见；同时有了static的生命周期
Global variable:文件作用域：可以加上extern 声明为外部变量，跨文件作用域

static (Global) Function: 有文件作用域，只在本文件中使用
Global Function:无文件作用域

static Member (in Function) variable:函数调用完成后，变量保存状态，再次调用函数，不会重新分配空间
Member(in Funcition) variable:函数内的生命周期

static Member(in Class) variable: 属于类范围，
Member(in Class) variable:属于类派生的特定对象，生命周期和对象一致
*
*/

/*
 *
 * http://www.blogjava.net/jinfeng_wang/archive/2007/05/22/119155.html
 * http://hi.baidu.com/czlaner/blog/item/ed3ab7165b74db12972b43d3.html
 * http://coastline.freepgs.com/?p=25
 * http://blog.csdn.net/niujian228/archive/2009/03/26/4028016.aspx
*/

///@alex:注意，在外部，这个extern的声明是绝对必不可少的！！

static float gf_sf_v1=0.0f;// 1/6 静态全局变量，拥有全局生存期及本文件内有效范围

float gg_f_v2=0.0f;// 2/6 全局变量，也是静态变量，拥有全局生存期及全局有效范围

class test
{
private:	
	int i,j;
public:
	test();
	test(const test & copy);
	test & operator=(const test & assign);

	~test() {}; ///@alex:析构函数容易丢失

	int geti(void) { return this->i;}
	int getj(void) { return this->j;}

	bool seti(int i_) { this->i=i_; return true; }
	bool setj(int j_) { this->j=j_; return true; }

};

test & gg_t(void)
{
	static test g_t_v3;// 3/6 静态局部变量，在第一次调用的时候进行初始化，其后的所有调用均不进行初始化。具有全局生存期，函数内有效范围
	test a_t_v4;// 4/6 局部变量，局部生存期，函数内有效范围
	return g_t_v3;
}

int g_fun (void) // 5/6 全局函数，具有全局有效范围
{
	return 0;
};

static int f_fun(void)// 6/6 静态函数，具有文件内有效范围
{
	return 0;
}

test::test() : i(0), j(0) {};

test::test(const test & copy)
{
	this->i=copy.i;
	this->j=copy.j;
}

test & test::operator=(const test & assign) ///@alex: 这个test::容易被忽略的！！
{
	if(this == & assign)
	{
		return *this;
	}

	this->i=0; this->j=0;

	this->i=assign.i; this->j=assign.j;

	return *this;

}


